package XueXi;

public class YunSuanFu {
    public static void main(String[] args) {
          /*

          赋值运算符: =

           */
        int a2 = 5;
        a2 = a2 + 1;//取出a的值5,加上1之后,再赋值给a
        System.out.println(a2);//6

        double b2 = 5000;//账户余额
        b2 = b2 + 2000;//存款2000
        System.out.println(b2);

        double price = 1000.0;//消费金额
        price = price * 0.8;//打八折
        System.out.println(price);
          /*
          字符串连接运算符
                1)+:
                    1.1)两边都是数字,则做加法运算
                    1.2)若某一边出现字符串,则做字符串连接运算
         */
        int age = 37;
        int x = 3;
        System.out.println("age=");//age=
        System.out.println(age);//37
        System.out.println("age=" + age);//age=37
        System.out.println("我的年龄是" + age);//我的年龄是37
        System.out.println("我今年" + age + "岁了");//我今年37岁了
        String name = "LS";
        System.out.println("name="+name);//name=LS
        System.out.println("大家好,我叫" + name + ",我今年" + age + "岁");
        System.out.println(x + age + "岁");//40岁
        System.out.println("我今年" + x + age + "岁");//我今年337岁
             /*
          算数运算符:  +,-,*,/,%,++,--
            1) / :两个整数相除,结果还是整数
                  小数位无条件舍去(不会四舍五入)
            2) % :取余 获取余数  余数为0即为整除
                    理解:将前面的数字按照后面的进行拆分
                        拆分出若干组之后剩下的,剩下的
                        ！只留下不能被除的余数！
            3)++/--:自增1/自减1,此运算符可以放在变量前也可以变量后
                3.1)单独使用时,在前和在后都一样
                3.2)被使用时,在前在后不一样
                       ++在前面,就是a+1
                       ++在后面,就是a
               前缀式： ++a --a :先改变变量本身的值，再使用
               后缀式： a++ a-- :先使用，再改变变量本身的值
         */
        int a1 = 20;
        int b1 = 3;
        System.out.println(a1 + b1);//23
        System.out.println(a1 - b1);//17
        System.out.println(a1 * b1);//60
        System.out.println(a1 / b1);//6
        System.out.println(99999/10000);//9
        System.out.println(1/1000000);//0

        System.out.println(a1 % b1);//2
        System.out.println(100 % 33);//1
        System.out.println(25 % 5);//0

        System.out.println(10 % 3);//1  a%b=a-a/b*b
        System.out.println(-10 % 3);//-1  -10-(-10)/3*3
        System.out.println(10 % -3);//1   10-10/(-3)*(-3)
        System.out.println(-10 % -3);//-1  -10-(-10)/(-3)*(-3)

        int a = 8;
        int b = 8;
        int c = ++a;//在前
        System.out.println(a);//9
        System.out.println(c);//9
        int d = b++;//在后
        System.out.println(b);//9
        System.out.println(d);//8

        int i = 8;
        int r = 8;
        i++;
        System.out.println(a);//9
        ++r;
        System.out.println(b);//9

        /*
        复合赋值运算符
        += -= *= /= %=
        a += b;[等价于 a = a + b ]
        a -= b;[等价于 a = a - b ]
        a *= b;[等价于 a = a * b ]
        a /= b;[等价于 a = a / b ]
        a %= b;[等价于 a = a % b ]

        复合赋值运算符会进行数据类型转换，从而导致数据类型不发生改变
        byte b7 = 3;
        b7 += 2;   //等价于 b7 = (byte)(b7 + 2)
         */
        int a7 = 10;
        a7 += 5;
        System.out.println(a7);//15 10 + 5 = 15
        a7 -= 5;
        System.out.println(a7);//10  15 - 5 = 10
        a7 *= 5;
        System.out.println(a7);//50  10 * 5 = 50
        a7 /= 5;
        System.out.println(a7);//10  50 / 5 = 10
        a7 %= 3;
        System.out.println(a7);//1   10 % 3 = 1



         /*
         关系运算符
                1)   > 大于           < 小于
                     >= 大于或等于     <= 小于或等于
                     == 等于          != 不等于
                 2) 关系运算的结果为boolean类型
                 关系成立则为true,关系不成立则为false
         */

        int a3=5,b3=10,c3=5;
        boolean b4 = a3 > b3;//false
        System.out.println(b4);
        System.out.println(c3 < b3);//true
        System.out.println(a3 >= c3);//true
        System.out.println(a3 <= b3);//true
        //判断两个值是否相等
        System.out.println(a3 == b3);//false
        System.out.println(a3 == c3);//true
        //判断两个值是否不相等  若不相等则true  若相等则为false
        System.out.println(a3 != c3);//false
        System.out.println(b3 != c3);//true


        /*
          逻辑运算:结果也是boolean类型
            1) &&:逻辑与(并且),两边都为真则为真,见false则false
                 false  &&  false  =  false
                 true   &&  false  =  false
                 false  &&  true   =  false
                 true   &&  true   =  true
            2) ||:逻辑或(或者),两边都为假则为假,见true则true
                 false  ||  false  =  false
                 true   ||  false  =  true
                 false  ||  true   =  true
                 true   ||  true   =  true
            3) ! :逻辑非,非true则false,非false则true
                  !true  = false
                  !false = true
        逻辑运算通常用来连接关系运算
         */
        int a5=5,b5=10,c5=10;
        System.out.println(c5<b5 && a5<b5);//false
        System.out.println(a5<c5 && b5<c5);//false
        System.out.println(a5>c5 && a5>b5);//false
        System.out.println(a5<b5 && b5==c5);//true

        System.out.println(c5<b5 || a5<b5);//true
        System.out.println(a5<c5 || b5<c5);//true
        System.out.println(a5>c5 || a5>b5);//false
        System.out.println(a5<b5 || b5==c5);//true

        System.out.println(!(c5>a5));//false
        System.out.println(!(c5<a5));//true

        /*
        ^ 逻辑异或
        a ^ b 当a与b不同时，结果为true,反之为false
         */

        int a6 = 10;
        int b6 = 10;
        System.out.println(a6<5 ^ b6>5);//判断对错结果是否一样，不同为真，相同为假
        System.out.println(a6<5 ^ b6>20);//(false ^ false) = false
        System.out.println(a6<5 ^ b6>5);//(false ^ true) = true
        System.out.println(a6>5 ^ b6<20);//(true ^ true) = false


    }
}
